from dataclasses import dataclass
from typing import Optional

@dataclass
class Message:
    """
    基础消息类:
    source: str  消息来源, 通常情况下是agent的名字, 但也可以是 "user", 表示是来自系统用户的消息.
    content: str  消息内容
    """
    
    source: str
    content: str
    
    def __str__(self):
        return f"Message: <{self.source}> {self.content}"
    
@dataclass
class MessageChunk(Message):
    """
    消息块类，用于流式消息:
    source: str  消息来源,
    content: str  消息内容
    """
    
    source: str
    content: str
    
    def __str__(self):
        return f"MessageChunk: <{self.source}> {self.content}"

@dataclass
class ToolCallMessage(Message):
    """
    工具调用消息:
    source: str  消息源
    content: any  工具调用消息
    tool_calls: list[ToolCall]  工具调用列表
    """
    
    source: str 
    content: str
    tool_calls: any
    
    def __str__(self):
        return f"ToolCallMessage: {self.content.strip() if self.content else ''} <{self.source}>请求调用工具 <{[fc.function.name for fc in self.tool_calls]}>"

@dataclass
class ToolCallResponseMessage(Message):
    """
    工具调用结果消息:
    source: str  消息源
    tool_name: str  工具名称,
    tool_description: str  工具描述,
    parameters: dict  工具调用参数,
    tool_call_id: str  工具调用ID,
    content: Optional[str]  工具执行结果(可为None表示未执行)
    """
    
    source: str 
    tool_name: str 
    tool_description: str
    parameters: dict 
    tool_call_id: str
    content: Optional[dict] 
    
    def __str__(self):
        if self.content:
            return f"ToolCallResponseMessage: <{self.source}>调用工具 <{self.tool_name}> 描述: {self.tool_description} 参数: {self.parameters} 执行结果: {self.content}"